import { BackendSession, FrontendSession } from 'kilom';
import { MsgId, MsgToc } from '../config/Msg';

/**
 * 前端服务器会话 封装接口
 */
export abstract class IFSess extends FrontendSession {

    send<ID extends keyof MsgToc>(msgId: ID, msg: MsgToc[ID]): void
    send<ID extends Exclude<MsgId, keyof MsgToc>>(msgId: ID): void
    send(msgId: MsgId, msg?: any): void { }

    sends<ID extends keyof MsgToc>(msgs: { msgId: ID, msg?: MsgToc[ID] }[]): void
    sends<ID extends Exclude<MsgId, keyof MsgToc>>(msgs: { msgId: ID }[]): void
    sends(msgs: { msgId: MsgId, msg?: any }[]): void { }

}

/**
 * 后端服务器会话 封装接口
 */
export abstract class IBSess extends BackendSession {

    send<ID extends keyof MsgToc>(msgId: ID, msg: MsgToc[ID]): Promise<string>
    send<ID extends Exclude<MsgId, keyof MsgToc>>(msgId: ID): Promise<string>
    send<ID extends MsgId>(msgId: ID, msg?: any): Promise<string> { return; }

    sends<ID extends keyof MsgToc>(msgs: { msgId: ID, msg?: MsgToc[ID] }[]): Promise<string>
    sends<ID extends Exclude<MsgId, keyof MsgToc>>(msgs: { msgId: ID }[]): Promise<string>
    sends<ID extends MsgId>(msgs: { msgId: ID, msg?: any }[]): Promise<string> { return; }
}